---
title: resultMap与sql
---

MyBatis 可以自动帮助我们映射数据库数据和 Java 对象，其实这是 MyBatis 在背后帮我们创建了 resultMap 对象；虽然 MyBatis
可以自动帮助我们创建 resultMap 对象，但是我们也可以手动创建 resultMap 对象，这样可以更加灵活地控制映射关系。

在书写 SQL 时，势必会有一些 SQL 代码出现了重复，为了更好的复用它们 ，MyBatis 提供了 sql 标签。

:::tip
resultMap 标签用于将数据库数据映射为 Java 对象；sql 标签则用来定义可重用的 SQL 代码片段。
:::

## resultMap

resultMap 标签用于将数据库数据映射为 Java 对象, 可以解决属性名和字段名不一致的问题。

也可以使用起别名解决这个问题。

```xml
<resultMap id="UserMap" type="User">
    <id property="id" column="id"/>
    <!--column 数据库中的字段，property 实体类中的属性-->
    <result property="userName" column="username"/>
    <result property="pwd" column="password"/>
</resultMap>
<select id="getUserById" resultMap="UserMap">
select *
from user
where id = #{id}
</select>
```

resultMap 的设计思想史，对于简单的语句根本不需要配置显式的结果映射，而对于复杂一点的语句，只需要描述它们的关系就可以了。

上述的语句只是简单的将所有的列映射到 HashMap 的键上，这由 resultType 的属性指定。虽然在大部分情况下都够用，但是 HashMap 不是一个很好的领域模型。

针对 JavaBean ，MyBatis 会在背后自动创建一个 ResultMap，再基于属性名来映射列到 JavaBean 的属性上。如果没有精确匹配，可以在 SELECT 语句中对列使用别名来匹配属性名。



